iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
自我挑戰組

Bug仔的筆記本系列 第 15

寫一個單元測試

  • 分享至 

  • xImage
  •  

平常我們的程式有沒有問題,都是用偵錯模式自己手動去看。

當程式很小的時候可以這樣測試。

但是當你的程式越來越大的時候,你可能很難一個一個去測試。甚至某些功能寫在很深的地方。不可能每次用 F5 跳啊跳,跳到要測試的地方。

單元測試的加入,提供你對你的程式信心。不會因為使用者亂輸入而出錯之類的。

而這個信心強度是依你的單元測試數量、品質、受測項目而提高。

.NET 中常見的單元測試框架有 MSTestNUnitXUnit。每個框架各有有缺點,也各有其支持者。我在以前公司的方案裡,有的子專案用NUnit、有的用XUnit的情況。

Visual Studio 內建 MSTest ,而另外兩個則需要在專案中從 NuGet 安裝。本篇文章我們會使用 MSTest 來示範。

  • 你可以從現有的程式碼按右鍵加入單元測試。
    https://ithelp.ithome.com.tw/upload/images/20220930/201204206uTpucA1pM.png
    這邊我們使用預設選項
    https://ithelp.ithome.com.tw/upload/images/20220930/20120420icWP2TXxlN.png

  • 又或者從方案中,右鍵->加入->新增專案,選擇 MSTest 專案
    https://ithelp.ithome.com.tw/upload/images/20220930/20120420Uiw1EivUQA.png
    看你的的專案選擇用.NET Framework 或 .NET Core 的 MSTest 版本
    https://ithelp.ithome.com.tw/upload/images/20220930/20120420EXGtzPqJDd.png

單元測試的專案名稱,習慣會在結尾加上 Tests,如果你們公司有規定不同的命名,就依照公司規定就好。

現在我們就可以寫一個簡的的單元測試,以下是使用直接對程式碼右鍵產生的單元測試範本:
https://ithelp.ithome.com.tw/upload/images/20220930/20120420CEw2M1Qqy1.png

3A=> Arrange、Act、Assert

就跟作文會有起、承、轉、合一樣,單元測試則由 Arrange、Act、Assert 三個段落所組成

  1. Arrange // 前置準備
  2. Act // 執行
  3. Assert // 驗證結果

有些更簡單的測試可能只有 Act 和 Assert,沒有 Arrange。

現在我要幫前幾天寫的 Mapper,寫一個單元測試

[TestMethod()]
public void MapTest()
{
    // Arrange
    var userViewModel = new UserViewModel()
    {
        Id = 1,
        Email = "test@test.com",
        Name = "長庚"
    };

    // Act
    var user = MyMapper.Map<UserViewModel, User>(userViewModel);

    // Assert
    Assert.AreEqual(userViewModel.Id, user.Id);
    Assert.AreEqual(userViewModel.Email, user.Email);
    Assert.AreEqual(userViewModel.Name, user.Name);
}

Assert物件裡面提供了各種判斷是否符合的方法,這邊我使用Assert.AreEqual()來判斷 user 的值是否跟 userViewModel 一樣。

執行測試

接下來就執行測試,你可對方法右鍵來執行測試
https://ithelp.ithome.com.tw/upload/images/20220930/20120420mvgeOh4Fch.png

或是開啟測試總管(Visual Studio 不同版本名稱不同)
https://ithelp.ithome.com.tw/upload/images/20220930/20120420jqygWuTnPb.png
https://ithelp.ithome.com.tw/upload/images/20220930/20120420lezwPLu4jH.png

點選三角形撥放鍵圖案,就可以進行測試。左邊是全部測試,右邊是測試指定項目。
https://ithelp.ithome.com.tw/upload/images/20220930/20120420NxiLRI1OSn.png

MSTest中,能受測的方法一定要標示[TestMethod()],其類別也需要標示[TestClass()]才會出現在測試總管中。

測試成功會標綠燈
https://ithelp.ithome.com.tw/upload/images/20220930/20120420rEjbPlv1C1.png


上一篇
寫一個自己專用的 Code Snippet 程式碼片段
下一篇
使用 Mock(moq) 隔離單元測試
系列文
Bug仔的筆記本30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言